我正试图全神贯注于反射,所以我决定将插件功能添加到我正在编写的程序中。理解一个概念的唯一方法就是动手写代码,所以我创建了一个简单的接口(interface)库,其中包含IPlugin和IHost接口(interface),一个实现IPlugin的类的插件实现库,以及一个简单的实例化IHost实现类的控制台项目,该类对插件对象进行简单的工作。使用反射,我想遍历我的插件实现dll中包含的类型并创建类型的实例。我能够使用此代码成功实例化类,但无法将创建的对象转换为接口(interface)。我尝试了这段代码,但无法按预期转换对象o。我使用调试器逐步完成了整个过程,并调用了正确的构造函数。快速
例如,我从加载的程序集中读取类型:varsomeType=loadedAssemblies.Where(a=>a!=null&&a.FullName.StartsWith("MY.")).SelectMany(a=>a.GetTypes()).Distinct().ToArray()[0];如果counstructor有参数,我可以读取它们:ParameterInfo[]parameters=classType.GetConstructors()[0].GetParameters();我想使用默认参数值调用构造函数,或者如果参数是枚举,则使用第一个枚举值。如果只有一个参数,并且是枚举,
我正在使用反射来映射对象。这些对象在托管代码中,但除了通过反射之外,我看不到它们的源代码、底层结构等。所有这一切的首要目标是一个对象的基本内存映射(在功能上类似于SOS.dllDumpObject和!ObjSize命令)。因此,我试图确定哪些成员被“重复计算”为字段和属性。例如:publicclassCalendarEntry{//privatepropertyprivateDateTimedate{get;set;}//publicfieldpublicstringday="DAY";}当映射显示时:字段天k__BackingField属性日期像这样的类在哪里:publicclass
我正在使用旧版MainMenucontrol(withMenuItems)controlinanapplication,andwouldliketoimplementzoominandzoomoutmenuitems(withControl++和Control+-键盘快捷键)。(请注意,我使用的是MainMenu而不是MenuStrip)。MenuItem确实有一个Shortcut属性,类型Shortcut,但它没有CtrlPlus选项。我决定看看如何Shortcutwasimplementedinthereferencesource,看起来每个枚举值只是几个Keys的组合枚举值(例如
有没有办法在.NET3.5运行时通过反射创建C#3.0匿名对象?我想在我的序列化方案中支持它们,因此我需要一种以编程方式操作它们的方法。稍后进行编辑以阐明用例一个额外的限制是我将在Silverlight应用程序中运行所有这些,因此额外的运行时不是一个选项,并且不确定动态生成代码将如何工作。 最佳答案 这是另一种方式,似乎更直接。objectanon=Activator.CreateInstance(existingObject.GetType()); 关于c#-C#中通过反射创建匿名对象
首先,一个按预期工作的示例:(所有代码都在VS2008即时窗口中执行)25isIComparable>>true25.GetType().GetInterfaces()>>{System.Type[5]}>>[0]:{Name="IComparable"FullName=...>>[1]:{Name="IFormattable"FullName=...>>...到目前为止一切顺利。现在让我们尝试一个通过基类型继承接口(interface)的对象:classTestBase:IComparable{publicintCompareTo(objectobj){thrownewNotImpl
我有一个类有一个ObservableCollection作为属性,我正在尝试更改该类实例的该属性内的值。这是我的代码,它会引发TargetException:object[]index=null;varoriginalPropertyName=propertyName;if(propertyName.Contains("[")&&propertyName.Contains("]")){index=newobject[1];index[0]=Convert.ToInt32(propertyName.Split('[')[1].Split(']')[0]);propertyName=pro
由于匿名类型的名称是编译器生成的,因此可以通过反射访问吗? 最佳答案 是的。就CLR/框架而言,它们是普通类型。事实上,你可以做一些interestingthings对匿名类型的反射(reflection)...虽然当前的C#编译器实际上创建了一个泛型类型,因此两个仅具有不同类型的“Foo”属性的匿名类型将共享一个泛型类型,但具有不同的封闭类型。 关于c#-c#中的匿名类型是否可以通过反射访问?,我们在StackOverflow上找到一个类似的问题: http
我正在编写一个工具,我需要在其中反射(reflect)方法,如果方法的参数是复杂类型,那么我需要某些类型的操作,例如实例化它们等。现在我在Type变量中看到了IsPrimitive属性。但是,它将string和decimal显示为复杂类型,这在技术上是正确的。然而,我真正想要的是能够区分开发人员创建的类类型和系统定义的数据类型。有什么办法可以做到这一点吗? 最佳答案 decimal肯定是“复杂类型”;C#可能有一个关键字,但它不是CLI原语。String你可以用任何一种方式争论-它实际上是一个完全独立的类型(不确定大小等-唯一可以远
这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:HowdoIdetectthe"new"modiferonafieldusingreflection?有如下声明publicclassB:A{publicnewstringName;}我如何确定该字段的FieldInfo实例是否具有"new"修饰符?